package com.shujia.wyh.day06.ketang;

/*
    接口的使用注意事项：
        1、接口中只允许存在抽象方法,默认会在方法前加上public abstract
        2、当具体的类实现接口的时候，必须要实现接口中所有抽象方法
        3、接口不能进行实例，没有构造方法
        4、接口中只允许存在常量，不允许变量存在，默认会在变量前加上public static final
        5、接口和接口之间存在继承关系,可以进行多继承
        6、类和接口之间是实现关系，一个类可以同时实现多个接口（举例：抽烟敲代码学生既可以敲代码，也会抽烟）

    面试题：java中允许多继承
        接口和接口之间允许多继承
        类和类之间只允许单继承

 */

interface Inter1{}

interface Inter2{}

interface Inter3 extends Inter1,Inter2{}

interface Code{
//    public void Coding(){
//        System.out.println("敲代码");
//    }
    int a = 10;

    public abstract void Coding();
}

interface Smoke{
    void smoking();
}

//抽象类可以实现接口
abstract class Demo3 implements Smoke{

}



class Person6{

}

//一个类可以在继承一个类的同时实现多个接口
class CodeStudent extends Person6 implements Code,Smoke{

    @Override
    public void Coding() {
//        a = 11; //java: 无法为最终变量a分配值
        System.out.println(a);
        System.out.println("敲代码");
    }

    @Override
    public void smoking() {
        System.out.println("会抽烟");
    }
}

public class InterfaceDemo2 {
    public static void main(String[] args) {
//        Code code = new Code();
//        CodeStudent codeStudent = new CodeStudent();
//        codeStudent.Coding();
//        System.out.println(Code.a);
//        CodeStudent codeStudent = new CodeStudent();
//        codeStudent.smoking();
//        codeStudent.Coding();

        Smoke s = new CodeStudent();  //接口多态
        s.smoking();
//        s.Codeing();
    }
}
